<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<meta name="keywords" content="spring,Spring,java,web,程序员,博客,IT,技术,移动开发,Web前端,企业架构,编程语言,互联网,数据库,技术博客,blog,分布式架构,分布式">
		<meta name="description" content="cdcoder是一个程序员学习交流平台，深度IT技术博客，移动开发博客,Web前端博客,企业架构博客,编程语言博客,互联网博客,数据库博客,IT blog,核心关注IT知识传播，共享。为更好的IT产业贡献一份微薄的力量。">
		<link rel="shortcut icon" href="/img/code.ico" />
		<link rel="bookmark"href="/img/code.ico" />
		<title>徐思润个人博客</title>
		<link href="css/index.css" rel="stylesheet">
		<style>
			body {
				font-size: 16px;
				font: 400 16px/1.62 Georgia, "Xin Gothic", "Hiragino Sans GB", "Droid Sans Fallback", "Microsoft YaHei", sans-serif;
				font-family: 'PT serif', 微軟正黑體, 微软雅黑, 华文细黑, Microsoft Yahei, Hiragino Sans GB, sans-serif;
				color: #D0CCCC;
				text-shadow: 0px 0px 1px rgba(24, 22, 22, 0.35);
				background-color: #000;
			}
		
		</style>
	</head>
	<body>

		<canvas height="100%" width="100%" style="position: fixed; top: 0px; left: 0px; z-index: -1; opacity: 1;" id="canvas"></canvas>
		<header>
			<div class="logo"><a href="/index.html">徐思润博客</a></div>
			<nav>
				<ul id="starlist">
					<li><a href="/java/index.html">java</a></li>
					<li><a href="/data/index.html">算法与数据结构</a></li>
					<li><a href="/db/mysql.html">数据库</a></li>
					<li><a href="/distribution/index.html">分布式</a></li>
					<li><a href="/framework/index.html">架构</a></li>
					<li><a href="/interview/index.html">面试与被面试</a></li>
					<li><a href="/live/index.html">日常生活</a></li>
					<li><a href="/about.html">关于我</a></li>
					<li><a href="/baby/index.html">baby墙</a></li>
				</ul>
			</nav>
		</header>
		<div class="box">
			<div class="newsbox f_l ">
				<div class="newstitle"><span><a href="/zcfg/">...</a></span><b>JAVA</b></div>
				<ul class="newsli">
					<li><a   href="java/base_java.html" target="_blank" title="JAVA基础知识">JAVA基础知识 <span>2018年4月26日</span></a></li>
					<li><a href="java/j2ee.html" target="_blank" title="J2EE基础知识">J2EE基础知识<span>2017年4月26日</span></a></li>
					<li><a href="java/design_pattern.html" target="_blank" title="设计模式">设计模式<span>2018年5月3日</span></a></li>
					<li><a href="java/concurrency/thread.html" target="_blank" title="多线程">多线程<span>2016年10月20日</span></a></li>
					<li><a href="java/jvm.html" target="_blank" title="JVM">JVM<span>2016年5月26日</span></a></li>
					<li><a href="java/io_nio.html" target="_blank" title="io与nio">io与nio<span>2018年11月5日</span></a></li>
				</ul>
			</div>
			<div class="newsbox f_r ">
				<div class="newstitle"><span><a href="/zcfg/">...</a></span><b>算法与数据结构</b></div>
				<ul class="newsli">
					<li><a href="/data/basics.html" target="_blank" title="数据结构与算法基础">数据结构与算法基础<span>2017年8月3日</span></a></li>
					<li><a href="/data/linear_table.html" target="_blank" title="线性表">线性表<span>2018年6月20日</span></a></li>
						<li><a href="/data/stack_queue.html" target="_blank" title="队列">栈与队列<span>2018年11月2日</span></a></li>
					<li><a href="/data/recursion.html" target="_blank" title="递归">递归<span>2018年3月15日</span></a></li>
					<li><a href="/data/tree.html" target="_blank" title="树">树<span>2018年4月17日</span></a></li>
					<li><a href="/data/sort.html" target="_blank" title="排序">排序<span>2011年1月5日</span></a></li>
				
				</ul>
			</div>
			<div class="blank"></div>
			<div class="sbox f_l"> <span>数据库</span>
				<h2>删除到跑路的mysql修炼手册</h2>
				<p> mysql的日常使用和规范</p>
				<a href="/db/mysql.html" class="read">点击阅读</a>
			</div>
			<div class="sbox f_l ml"> <span>分布式</span>
				<h2>分布式相关技术总会</h2>
				<p>网络通信 CAP/BASE 理论 事务和分布式事务 分布式锁的实现方式 </p>
				<a href="/" class="read">点击阅读</a>
			</div>
			<div class="sbox f_r"> <span>面试</span>
				<h2>面试与被面试的手册</h2>
				<p>码农的成长史上怎么能少的了面试与被面试呢？怎样的面试与被面试才能促进大家友好的交流与学习呢？</p>
				<a href="#" class="read">点击阅读</a>
			</div>
			<div class="blank"></div>
		<!-- 	<div class="blogs">
				<div class="bloglist">
					<h2><a href="#" title="程序员请放下你的技术情节，与你的同伴一起进步">程序员请放下你的技术情节，与你的同伴一起进步</a></h2>
					<p>如果说掌握一门赖以生计的技术是技术人员要学会的第一课的话， 那么我觉得技术人员要真正学会的第二课，不是技术，而是业务、交流与协作</p>
				</div>
				<div class="bloglist">
					<h2><a href="#" title="个人博客，我为什么要用帝国cms？">个人博客，我为什么要用帝国cms？</a></h2>
					<p>选择帝国cms，做一个博客系统，很多人都说是大材小用。确实是有那种感觉，因为cms有很多功能表用不上。但是帝国cms的安装包也就才6M，如果你放一张高清的1920的图，都比这安装包大！我就来说一说我为什么要用帝国cms。</p>
				</div>
				<div class="bloglist">
					<h2><a href="#" title="个人博客，属于我的小世界！">个人博客，属于我的小世界！</a></h2>
					<p>个人博客，用来做什么？我刚开始就把它当做一个我吐槽心情的地方，也就相当于一个网络记事本，写上一些关于自己生活工作中的小情小事，也会放上一些照片，音乐。每天工作回家后就能访问自己的网站，一边听着音乐，一边写写文章。</p>
				</div>
			 
			</div> -->
			<aside>
				

				<div class="paihang">
					<h2>友情链接</h2>
					<ul>
						<li><a href="#"></a></li>
					</ul>
				</div>
			</aside>
		</div>
		<footer>
			<p>Design by <a href="http://cdcoder.cn" target="_blank">徐思润个人博客</a> </p>
			<p>备案号：<a href="/">蜀ICP备15014105号-1</a></p>
			<script type="text/javascript" src="https://s96.cnzz.com/z_stat.php?id=1277229191&web_id=1277229191"></script>
		</footer>

		<script>
			var canvas,
				ctx,
				width,
				height,
				size,
				lines,
				tick;

			function line() {
				this.path = [];
				this.speed = rand(1, 20);
				this.count = randInt(1, 30);
				this.x = width / 2, +1;
				this.y = height / 2 + 1;
				this.target = {
					x: width / 2,
					y: height / 2
				};
				this.dist = 0;
				this.angle = 0;
				this.hue = tick / 5;
				this.life = 1;
				this.updateAngle();
				this.updateDist();
			}

			line.prototype.step = function(i) {
				this.x += Math.cos(this.angle) * this.speed;
				this.y += Math.sin(this.angle) * this.speed;

				this.updateDist();

				if (this.dist < this.speed) {
					this.x = this.target.x;
					this.y = this.target.y;
					this.changeTarget();
				}

				this.path.push({
					x: this.x,
					y: this.y
				});
				if (this.path.length > this.count) {
					this.path.shift();
				}

				this.life -= 0.001;

				if (this.life <= 0) {
					this.path = null;
					lines.splice(i, 1);
				}
			};

			line.prototype.updateDist = function() {
				var dx = this.target.x - this.x,
					dy = this.target.y - this.y;
				this.dist = Math.sqrt(dx * dx + dy * dy);
			}

			line.prototype.updateAngle = function() {
				var dx = this.target.x - this.x,
					dy = this.target.y - this.y;
				this.angle = Math.atan2(dy, dx);
			}

			line.prototype.changeTarget = function() {
				var randStart = randInt(0, 3);
				switch (randStart) {
					case 0: // up
						this.target.y = this.y - size;
						break;
					case 1: // right
						this.target.x = this.x + size;
						break;
					case 2: // down
						this.target.y = this.y + size;
						break;
					case 3: // left
						this.target.x = this.x - size;
				}
				this.updateAngle();
			};

			line.prototype.draw = function(i) {
				ctx.beginPath();
				var rando = rand(0, 10);
				for (var j = 0, length = this.path.length; j < length; j++) {
					ctx[(j === 0) ? 'moveTo' : 'lineTo'](this.path[j].x + rand(-rando, rando), this.path[j].y + rand(-rando, rando));
				}
				ctx.strokeStyle = 'hsla(' + rand(this.hue, this.hue + 30) + ', 80%, 55%, ' + (this.life / 3) + ')';
				ctx.lineWidth = rand(0.1, 2);
				ctx.stroke();
			};

			function rand(min, max) {
				return Math.random() * (max - min) + min;
			}

			function randInt(min, max) {
				return Math.floor(min + Math.random() * (max - min + 1));
			};

			function init() {
				canvas = document.getElementById('canvas');
				ctx = canvas.getContext('2d');
				size = 30;
				lines = [];
				reset();
				loop();
			}

			function reset() {
				width = Math.ceil(window.innerWidth / 2) * 2;
				height = Math.ceil(window.innerHeight / 2) * 2;
				tick = 0;

				lines.length = 0;
				canvas.width = width;
				canvas.height = height;
			}

			function create() {
				if (tick % 5 === 0) {
					lines.push(new line());
				}
			}

			function step() {
				var i = lines.length;
				while (i--) {
					lines[i].step(i);
				}
			}

			function clear() {
				ctx.globalCompositeOperation = 'destination-out';
				ctx.fillStyle = 'hsla(0, 0%, 0%, 0.1';
				ctx.fillRect(0, 0, width, height);
				ctx.globalCompositeOperation = 'lighter';
			}

			function draw() {
				ctx.save();
				ctx.translate(width / 2, height / 2);
				ctx.rotate(tick * 0.001);
				var scale = 0.8 + Math.cos(tick * 0.02) * 0.2;
				ctx.scale(scale, scale);
				ctx.translate(-width / 2, -height / 2);
				var i = lines.length;
				while (i--) {
					lines[i].draw(i);
				}
				ctx.restore();
			}

			function loop() {
				requestAnimationFrame(loop);
				create();
				step();
				clear();
				draw();
				tick++;
			}

			function onresize() {
				reset();
			}
			window.addEventListener('resize', onresize);
			init();
		</script>


	</body>
</html>
